Elvis 操作符 (?:)
1. 简介
在 Kotlin 编程语言中,Elvis 操作符(?:)是一个非常有用的工具,用于处理可空类型(nullable types)。它的名字来源于其外观类似于猫王(Elvis Presley)的发型。Elvis 操作符允许你在某个值为 null 时提供一个默认值,从而简化代码并减少空指针异常的风险。
2. 基本语法
Elvis 操作符的基本语法如下:
val result = nullableValue ?: defaultValue
nullableValue是一个可空类型的变量或表达式。defaultValue是当nullableValue为null时返回的默认值。
如果 nullableValue 不为 null,则 result 的值为 nullableValue;如果 nullableValue 为 null,则 result 的值为 defaultValue。
3. 代码示例
3.1 基本使用
fun main() {
val nullableString: String? = null
val nonNullString: String? = "Hello, Kotlin"
val result1 = nullableString ?: "Default Value"
val result2 = nonNullString ?: "Default Value"
println(result1) // 输出: Default Value
println(result2) // 输出: Hello, Kotlin
}
在这个例子中,nullableString 为 null,所以 result1 的值为 "Default Value"。而 nonNullString 不为 null,所以 result2 的值为 "Hello, Kotlin"。
3.2 结合其他操作符
Elvis 操作符可以与其他操作符结合使用,例如安全调用操作符(?.):
fun main() {
val nullableString: String? = null
val length = nullableString?.length ?: -1
println(length) // 输出: -1
}
在这个例子中,nullableString?.length 返回 null,因为 nullableString 为 null。因此,length 的值为 -1。
4. 实践练习
4.1 练习 1:处理用户输入
编写一个程序,要求用户输入一个整数。如果用户输入为空或无效,程序应返回 -1。
fun main() {
print("请输入一个整数: ")
val input = readLine()
val number = input?.toIntOrNull() ?: -1
println("你输入的整数是: $number")
}
4.2 练习 2:处理列表中的空值
编写一个函数,接受一个包含可空整数的列表,并返回一个包含非空整数的列表。如果列表中某个元素为 null,则将其替换为 0。
fun filterNonNull(list: List<Int?>): List<Int> {
return list.map { it ?: 0 }
}
fun main() {
val list = listOf(1, null, 3, null, 5)
val filteredList = filterNonNull(list)
println(filteredList) // 输出: [1, 0, 3, 0, 5]
}
5. 总结
Elvis 操作符是 Kotlin 中处理可空类型的一个强大工具。它允许你在值为 null 时提供一个默认值,从而简化代码并减少空指针异常的风险。通过结合其他操作符(如安全调用操作符 ?.),你可以更灵活地处理可空类型。
希望这篇教程能帮助你更好地理解和使用 Elvis 操作符。继续练习和探索 Kotlin 的其他特性,你会发现这门语言的强大和优雅之处。